

// TypeScript 定义变量推荐使用let
let isDone: boolean = false;

let decimal: number = 6;

let hex: number = 0x1234;

let binary: number = 0b1010;

let octal: number = 0o1234;

let myname: string = "bolb";

myname = "smith";
let age: number = 20
// 使用反引号，可以内嵌${}表达式
let sentence: string = `Hello, my name is ${myname},
I'll be ${age+1} years old next month.`;
document.write("<p>"+sentence+"</p>")

// 数组的定义
let list: number[] = [1,2,4,8];
let list2: Array<number> = [1,2,4,8];

// 元组的定义 Tuple
let tpxy: [string, number];
tpxy = ["hello", 10];
// 错误的初始化，类型不匹配
//tpxy = [10, "hello"];
document.write(`<p>${tpxy[0]}</p>`);
// 如果访问越界了，则新建一个联合的类型
tpxy[3] = "word";
document.write(`<p>${typeof tpxy[3]}: ${tpxy[3]}</p>`);

// 枚举
enum Color {Red=1, Green, Blue};
let c: Color = Color.Green;
// Color[2]：返回Green,Color[3]返回Blue，
document.write(`<p>${c}: ${Color[3]}</p>`);

// 任意值
let notSure: any = 4;
notSure = "maybe a string stread";
notSure = false;
//notSure.ifItExists();   // 有问题，导致后面不执行了
//notSure.toFixed();

// 但是Object类型的变量只是允许你给它赋任意值
// 但是却不能够在它上面调用任意的方法，即便它真的有这些方法：
let prettySure: Object = 4;
//prettySure.toFixed(); // Error

let listUnsure: any[] = [1, true, "free"];
listUnsure[1] = 100;

// 空值，void类型
// 某种程度上来说，void类型像是与any类型相反，它表示没有任何类型
// 声明一个void类型的变量没有什么大用，因为你只能为它赋予undefined和null：
let unusable: void = undefined;

// null和undefined 类型
let u: undefined = undefined;
let n: null = null;

// 类型断言，告诉编译器我明确知道类型，类似强制转换，使用尖括号或as语法
let someValue: any = "123456";
let strLength: number = (<string>someValue).length;
strLength = (someValue as string).length;
document.write(`<p>strLength: ${strLength}</p>`)




























